<template>
  <div >
    <span style="line-height: 38px; font-size: 18px;" v-html="typedText"></span>
    <span class="dots" :class="{ 'loading-dots': animateIcon }">
      <span></span>
      <span></span>
      <span></span>
    </span>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const text = ref("先帝创业未半而中道崩殂，今天下三分，益州疲弊，此诚危急存亡之秋也。然侍卫之臣不懈于内，忠志之士忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气，不宜妄自菲薄，引喻失义，以塞忠谏之路也。\n\n宫中府中，俱为一体，陟罚臧否，不宜异同。若有作奸犯科及为忠善者，宜付有司论其刑赏，以昭陛下平明之理，不宜偏私，使内外异法也。\n\n侍中、侍郎郭攸之、费祎、董允等，此皆良实，志虑忠纯，是以先帝简拔以遗陛下。愚以为宫中之事，事无大小，悉以咨之，然后施行，必能裨补阙漏，有所广益。\n\n将军向宠，性行淑均，晓畅军事，试用于昔日，先帝称之曰能，是以众议举宠为督。愚以为营中之事，悉以咨之，必能使行阵和睦，优劣得所。\n\n亲贤臣，远小人，此先汉所以兴隆也；亲小人，远贤臣，此后汉所以倾颓也。先帝在时，每与臣论此事，未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军，此悉贞良死节之臣，愿陛下亲之信之，则汉室之隆，可计日而待也。\n\n臣本布衣，躬耕于南阳，苟全性命于乱世，不求闻达于诸侯。先帝不以臣卑鄙，猥自枉屈，三顾臣于草庐之中，咨臣以当世之事，由是感激，遂许先帝以驱驰。后值倾覆，受任于败军之际，奉命于危难之间，尔来二十有一年矣。\n\n先帝知臣谨慎，故临崩寄臣以大事也。受命以来，夙夜忧叹，恐托付不效，以伤先帝之明，故五月渡泸，深入不毛。今南方已定，兵甲已足，当奖率三军，北定中原，庶竭驽钝，攘除奸凶，兴复汉室，还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益，进尽忠言，则攸之、祎、允之任也。\n\n愿陛下托臣以讨贼兴复之效，不效，则治臣之罪，以告先帝之灵。若无兴德之言，则责攸之、祎、允等之慢，以彰其咎；陛下亦宜自谋，以咨诹善道，察纳雅言，深追先帝遗诏，臣不胜受恩感激。\n\n今当远离，临表涕零，不知所言。");
const typedText = ref("");
const animateIcon = ref(false);
// 使用SSE连接到服务器端
const eventSource = new EventSource("/sse-endpoint");
// 监听服务器端发送的消息
eventSource.onmessage = (event) => {
  text.value = event.data;
  typewriterEffect();
};

const typewriterEffect = () => {
  typedText.value = "";
  let index = 0;
  const typing = () => {
    if (index < text.value.length) {
      animateIcon.value = true;
      typedText.value += text.value.charAt(index);
      index++;
      setTimeout(typing, 100); // 设置每个字的间隔时间
    } else {
      animateIcon.value = false;
    }
  };
  typing();
};
typewriterEffect();
</script>

<style scoped>
.dots{
  padding-left: 6px;
  font-size: 30px;
  height: 4px;
  display: inline-flex;
}
.loading-dots span {
  animation: loading 1.2s infinite;
  opacity: 0;
  animation-delay: 0.2s;
  border-radius: 50%;
  background-color: #2c2c2c;
  margin-right: 4px;
  padding: 0px 2px;
}

.loading-dots span:nth-child(2) {
  animation-delay: 0.4s;
}
.loading-dots span:nth-child(3) {
  animation-delay: 0.6s;
}

@keyframes loading {
  0% {
    opacity: 0.3;
    padding: 0px 2px;
  }
  50% {
    opacity: 1;
    padding: 0px 4px;
  }
  100% {
    opacity: 0.3;
    padding: 0px 2px;
  }
}
</style>
